{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#用主成分分析降维"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在是时候升一级了！主成分分析（Principal component analysis，PCA）是本书介绍的第一个高级技术。到目前为止都是些简单的统计学知识，而PCA将统计学和线性代数组合起来实现降维，堪称简单模型的杀手锏。\n",
    "\n",
    "<!-- TEASER_END -->"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Getting ready"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "PCA是scikit-learn的一个分解模块。还有一些分解模块后面会介绍。让我们用`iris`数据集演示一下，你也可以用自己的数据集："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "iris = datasets.load_iris()\n",
    "iris_X = iris.data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##How to do it..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先导入分解模块："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn import decomposition"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后，初始化一个PCA对象："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PCA(copy=True, n_components=None, whiten=False)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca = decomposition.PCA()\n",
    "pca"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "和scikit-learn其他对象相比，PCA的参数很少。这样PCA对象就创建了，下面用`fit_transform`处理`iris_X`数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ -2.68420713e+00,  -3.26607315e-01,   2.15118370e-02,\n",
       "          1.00615724e-03],\n",
       "       [ -2.71539062e+00,   1.69556848e-01,   2.03521425e-01,\n",
       "          9.96024240e-02],\n",
       "       [ -2.88981954e+00,   1.37345610e-01,  -2.47092410e-02,\n",
       "          1.93045428e-02],\n",
       "       [ -2.74643720e+00,   3.11124316e-01,  -3.76719753e-02,\n",
       "         -7.59552741e-02],\n",
       "       [ -2.72859298e+00,  -3.33924564e-01,  -9.62296998e-02,\n",
       "         -6.31287327e-02]])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iris_pca = pca.fit_transform(iris_X)\n",
    "iris_pca[:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这样PCA就完成了，我们可以看看降维的效果："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.92461621,  0.05301557,  0.01718514,  0.00518309])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##How it works..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "PCA是在数据分析中有一般性的数学定义和具体的应用场景。PCA用正交向量集表示原始数据集。\n",
    "\n",
    "通常，PCA将原始数据集映射到新的空间中，里面每个列向量都是彼此正交的。从数据分析的视角看，PCA将数据集的协方差矩阵变换成若干能够“解释”一定比例变量的列向量。例如，在`iris`数据集中，92.5%的变量可以由第一个主成份表示。\n",
    "\n",
    "数据分析里面维度多会导致维度灾难，因此降维至关重要。通常算法处理高维训练集时会出现拟合过度（overfit）的情况，于是难以把握测试集的一般性特征。如果数据集的真实结构可以用更少的维度表示，那么通常都值得一试。\n",
    "\n",
    "为了演示这点，我们用PCA将`iris`数据集转换成二维数据。`iris`数据集用全部的维度通常可以很好的分类："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(150, 2)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca = decomposition.PCA(n_components=2)\n",
    "iris_X_prime = pca.fit_transform(iris_X)\n",
    "iris_X_prime.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们的矩阵现在是$150 \\times 2$，不是$150 \\times 4$了。二维变量更容易可视化："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x84571d0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x83c5fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt\n",
    "f = plt.figure(figsize=(5, 5))\n",
    "ax = f.add_subplot(111)\n",
    "ax.scatter(iris_X_prime[:,0], iris_X_prime[:, 1], c=iris.target)\n",
    "ax.set_title(\"PCA 2 Components\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "把数据集降成二维之后还是分离特征依然保留。我们可以查看这二维数据保留了多少变量信息："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.97763177502480336"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca.explained_variance_ratio_.sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##There's more..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "PCA对象还可以一开始设置解释变量的比例。例如，如果我们想介绍98%的变量，PCA对象就可以这样创建："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.99481691454981014"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca = decomposition.PCA(n_components=.98)\n",
    "iris_X_prime = pca.fit_transform(iris_X)\n",
    "pca.explained_variance_ratio_.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(150, 3)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iris_X_prime.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于我们想比二维主成份解释更多的变量，第三维就需要了。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
